package com.are.odisea;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class SrvUsuarios
 */
@WebServlet("/SrvUsuarios")
public class SrvUsuarios extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public SrvUsuarios() {
        super();
        // TODO Auto-generated constructor stub
    }

    
    protected void ProcesarPeticion(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
    	
    	response.setContentType("text/html;charset=ISO-8859-1");
		PrintWriter out = response.getWriter();

		HttpSession sesion=request.getSession();
		
		
		String operacion = (String) request.getParameter("operacion");
		db conexion = null;
		
		try {
		/* Inicio operacion Agregar Usuario */

		if (operacion.equals("add")) { // agregar departamento
			
			if (sesion.getAttribute("usuario") == null) {
				out.print("La sesion ha caducado... intente de nuevo por favor");
				return ;
			}
			
			String usuario = (String)sesion.getAttribute("usuario");
			
			String login = (String) request.getParameter("usuario");
			String nombre = (String) request.getParameter("nombre");
			String perfil = (String) request.getParameter("perfil");
			String clave = (String) request.getParameter("clave");
			String estado = (String) request.getParameter("estado");
			String descargas = (String) request.getParameter("descargas");
			String inventario = (String) request.getParameter("inventario");
			String noticias = (String) request.getParameter("noticias");
			String documentos = (String) request.getParameter("documentos");
			String encuestas = (String) request.getParameter("encuestas");
			String bandejas = (String) request.getParameter("bandejas");
			String gbandejas = (String) request.getParameter("gbandejas");
			String personal = (String) request.getParameter("personal");
			String rol = (String) request.getParameter("rol");
			

				conexion = new db();
				Usuario user = new Usuario();
				user.setCodigo(login);
				user.setNombre(nombre);
				user.setPerfil(perfil);
				user.setClave(clave);
				user.setEstado(estado);
				user.setPermitirDescargar(descargas);
				user.setPermitirVerInventario(inventario);
				user.setPermitirVerDocumentos(documentos);
				user.setPermitirVerNoticias(noticias);
				user.setPermitirVerEncuentas(encuestas);
				user.setPersonal(personal);
				user.setPermitirGestionarBandejas(gbandejas);
				user.setPermitirVerBandejas(bandejas);
				user.setRol(rol);
				GestionUsuario MU = new GestionUsuario(conexion,user,usuario);
				if (!MU.exist(user.getCodigo())) {
					if (MU.add()) {
						out.print("OK");
					}else {
						out.print("Error al procesar la solicitud");
					}
					
				}else {
					out.print("Usuario ya existe: " + user.getNombre());
				}
			

		}

		/* Fin operacion Agregar Usuario */

		if (operacion.equals("modify")) { // Update departamento
			if (sesion.getAttribute("usuario") == null) {
				out.print("La sesion ha caducado... intente de nuevo por favor");
				return ;
			}
			
			String usuario = (String)sesion.getAttribute("usuario");
			String login = (String) request.getParameter("usuario");
			String key = (String) request.getParameter("key");
			String nombre = (String) request.getParameter("nombre");
			String perfil = (String) request.getParameter("perfil");
			String clave = (String) request.getParameter("clave");
			String estado = (String) request.getParameter("estado");
			String descargas = (String) request.getParameter("descargas");
			String inventario = (String) request.getParameter("inventario");
			String noticias = (String) request.getParameter("noticias");
			String documentos = (String) request.getParameter("documentos");
			String encuestas = (String) request.getParameter("encuestas");
			String bandejas = (String) request.getParameter("bandejas");
			String gbandejas = (String) request.getParameter("gbandejas");
			String personal = (String) request.getParameter("personal");
			String rol = (String) request.getParameter("rol");
			

				conexion = new db();
				Usuario user = new Usuario();
				user.setCodigo(login);
				user.setNombre(nombre);
				user.setPerfil(perfil);
				user.setClave(clave);
				user.setEstado(estado);
				user.setPermitirDescargar(descargas);
				user.setPermitirVerInventario(inventario);
				user.setPermitirVerDocumentos(documentos);
				user.setPermitirVerNoticias(noticias);
				user.setPermitirVerEncuentas(encuestas);
				user.setPersonal(personal);
				user.setPermitirGestionarBandejas(gbandejas);
				user.setPermitirVerBandejas(bandejas);
				user.setRol(rol);
				GestionUsuario MU = new GestionUsuario(conexion,user,usuario);
				if (MU.exist(key)) {
					if (MU.update(key)) {
						out.print("OK");
					}else {
						out.print("Error al procesar la solicitud");
					}
					
				}else {
					out.print("Usuario no existe: " + user.getNombre());
				}

			

		}

		
		/* Inicio operacion listar departamentos */
		if (operacion.equals("list")) {
			if (sesion.getAttribute("usuario") == null) {
				out.print("La sesion ha caducado... intente de nuevo por favor");
				return ;
			}
			
				String criterio = (String)request.getParameter("criterio");
				conexion = new db();
				GestionUsuario MU = new GestionUsuario(conexion);
				ArrayList<Usuario> users = MU.list(criterio,GestionUsuario.ORDER_NOMBRE);

					out.println("<h2>Listado Usuarios</h2>");
					out.println("<table>");
					out.println("<tr>");
					out.println("<th>Usuario</th>");
					out.println("<th>Nombre</th>");
					out.println("<th>Perfil</th>");
					out.println("<th>Activo?</th>");
					out.println("<th>Fecha creacion</th>");
					out.println("<th>Usurio creador</th>");
					out.println("<th></th>");
					out.println("</tr>");
					int fila=1;
					for (Usuario user : users)
					{
						out.println("<tr " + (fila%2==0?"class='odd'":"") + ">");
						out.println("<td><strong>" + user.getCodigo() + "</strong></td>");
						out.println("<td>" + user.getNombre() + "</td>");
						out.println("<td>" + user.getPerfil() + "</td>");
						out.println("<td>" + (user.getEstado().equals("1")?"Si":"No") + "</td>");
						out.println("<td>" + user.getFechaCreacion() + "</td>");
						out.println("<td>" + user.getUsuarioCreacion() + "</td>");
						out.println("<td>");
						out.print("<a href=\"mod_usuario.jsp?menu=5&codigo="
								+ user.getCodigo()
								+ "\">Modificar</a>     <a href=\"javascript:remove('" 
								+ user.getCodigo() 
								+ "')\">Eliminar</a>     <a href=\"cambia_clave.jsp?codigo="  
								+ user.getCodigo() +"\">Cambiar clave</a>" +
										"  <a href=\"UsuarioPersonal.jsp?codigo=" + user.getCodigo() +"\">Recurso</a>" );
						out.println("</td>");
						out.println("</tr>");
						fila++;
					} 
					out.println("<tr " + (fila%2==0?"class='odd'":"") + ">");
					out.println("<td colspan='7'><strong>Total Registros encontrados: " + users.size() +"</strong></td>");
					out.println("</tr>");
					out.println("</table>");
				

			
			/* Fin operacion listar departamentos */

		}
		if (operacion.equals("checklist")) {
			String filtro=(String) request.getParameter("filtro");

				conexion = new db();
				GestionUsuario MU = new GestionUsuario(conexion);
				ArrayList<Usuario> users = MU.list(filtro, GestionUsuario.ORDER_CODIGO);
										for (Usuario user : users)
					{
						out.print("<input type=\"checkbox\" name=\"list_usu\" value=\""+user.getId()+"\">("+user.getCodigo()+")"+user.getNombre());						
					} 
			
		}
		
		if (operacion.equals("changepassword")) {
			
			if (sesion.getAttribute("usuario") == null) {
				out.print("La sesion ha caducado... intente de nuevo por favor");
				return ;
			}
			

			String user = (String)request.getParameter("usuario");
			String clave = (String)request.getParameter("clave");

				conexion = new db();
				GestionUsuario MU = new GestionUsuario(conexion);
				if (MU.exist(user)) {
					if (MU.changepassword(user, clave)) {
						out.print("OK");
					}else {
						out.print("Error al procesar la solicitud");
					}
				}else {
					out.print("Usuario no encontrado");
				}
				
				
			
		}
		
		if (operacion.equals("login")) {
			String user = (String)request.getParameter("usuario");
			String clave = (String)request.getParameter("clave");

				conexion = new db();
				GestionUsuario MU = new GestionUsuario(conexion);
				if (MU.exist(user)) {
					if (MU.login(user, clave)) {
						Usuario us = MU.getUser();
						// Registrar el usuario en la sesion
						sesion.setAttribute("usuario",us.getCodigo());
						sesion.setAttribute("id_usuario",us.getId());
						sesion.setAttribute("perfil", us.getPerfil());
						sesion.setAttribute("rol", us.getRol());
						
						out.print("OK");
					}else {
						out.print("Error de autenticacion");
					}
				}else {
					out.print("Usuario no encontrado");
				}
				
				
			
		}
		
		if (operacion.equals("add_personal")) {
			String usuario = (String)request.getParameter("usuario");
			String cedula = (String)request.getParameter("cedula");
			
			conexion = new db();
			GestionUsuario gu = new GestionUsuario(conexion);
			if (!gu.ExistUsuarioPersonal(usuario, cedula)) {
			
				com.are.entidades.UsuarioPersonal up = new com.are.entidades.UsuarioPersonal();
				up.setCedula(cedula);
				up.setUsuario(usuario);
				if (gu.AddPersonal(up)) {
					out.print("OK");
				}else {
					out.print("Error al procesar la solicitud");
				}

			}else {
				throw new SQLException ("Ya se encuentra registrado el personal al usuario");
			}
			
		}
		if (operacion.equals("remove_personal")) {
			String id = (String)request.getParameter("id");
			
			conexion = new db();
			GestionUsuario gu = new GestionUsuario(conexion);
			if (gu.RemovePersonal(id)) {
					out.print("OK");
				}else {
					out.print("Error al procesar la solicitud");
				}
		}
		
		if (operacion.equals("list_personal")) {
				String usuario = (String)request.getParameter("usuario");
				conexion = new db();
				GestionUsuario MU = new GestionUsuario(conexion);
				ArrayList<com.are.entidades.UsuarioPersonal> lista = MU.ListaUsuarioPersonal(usuario);

					out.println("<h2>Listado Personal Asignado</h2>");
					out.println("<table>");
					out.println("<tr>");
					out.println("<th>Cedula</th>");
					out.println("<th>Nombre</th>");
					out.println("<th></th>");
					out.println("</tr>");
					int fila=1;
					for (com.are.entidades.UsuarioPersonal personal : lista)
					{
						out.println("<tr " + (fila%2==0?"class='odd'":"") + ">");
						out.println("<td><strong>" + personal.getCedula() + "</strong></td>");
						out.println("<td>" + personal.getNombre() + "</td>");
						out.println("<td>");
						out.print("<a href=\"javascript:Eliminar('" +personal.getCedula()  + "','" + personal.getId() +"')\">Eliminar</a>");
						out.println("</td>");
						out.println("</tr>");
						fila++;
					} 
					out.println("<tr>");
					out.println("<td colspan='7'><strong>Total Usuarios: " + lista.size() +"</strong></td>");
					out.println("</tr>");
					out.println("</table>");
				

			
			/* Fin operacion listar departamentos */

		}
		
		
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			out.print("Error de conexion con el servidor: "
					+ e.getMessage());
		} finally {
			if (conexion != null) {
				try {
					conexion.Close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					out.print(e.getMessage());
				}
			}
		}
		
		
		out.close();
	}
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		this.ProcesarPeticion(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		this.ProcesarPeticion(request, response);
	}

}
